<!DOCTYPE html>

<html>
<head>
	
	<title>Pyramid Charts 2</title>

    <link class="include" rel="stylesheet" type="text/css" href="../jquery.jqplot.min.css" />
    <link rel="stylesheet" type="text/css" href="examples.min.css" />
    <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.min.css" />
    <link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shThemejqPlot.min.css" />
  
  <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="../excanvas.js"></script><![endif]-->
    <script class="include" type="text/javascript" src="../jquery.min.js"></script>
    
   
</head>
<body>
    <div class="logo">
   <div class="nav">
   <a class="nav" href="../../../index.php"><span>&gt;</span>Home</a>
   <a class="nav"  href="../../../docs/"><span>&gt;</span>Docs</a>
   <a class="nav"  href="../../download/"><span>&gt;</span>Download</a>
   <a class="nav" href="../../../info.php"><span>&gt;</span>Info</a>
   <a class="nav"  href="../../../donate.php"><span>&gt;</span>Donate</a>
   </div>
</div>
    <div class="example-content">

    <div class="example-nav">
  <a href="kcp_pyramid.html">Previous</a> <a href="./">Examples</a> <a href="kcp_pyramid_by_age.html">Next</a></div>

      
<!-- Example scripts go here -->

  <link class="include" type="text/css" href="jquery-ui/css/smoothness/jquery-ui.min.css" rel="Stylesheet" /> 

    <style type="text/css">
        .chart-container {
            border: 1px solid darkblue;
            padding: 30px;
            width: 600px;
            height: 700px;
        }

        #chart1 {
            width: 96%;
            height: 96%;
        }

        .jqplot-datestamp {
          font-size: 0.8em;
          color: #777;
    /*      margin-top: 1em;
          text-align: right;*/
          font-style: italic;
          position: absolute;
          bottom: 15px;
          right: 15px;
        }

        td.controls li {
            list-style-type: none;
        }

        td.controls ul {
            margin-top: 0.5em;
            padding-left: 0.2em;
        }

        pre.code {
            margin-top: 45px;
            clear: both;
        }

    </style>

    <table class="app">
        <td class="controls">

            <div style="margin-bottom: 15px;">
                Axes:
                <select name="axisPosition">
                    <option value="both">Left &amp; Right</option>
                    <option value = "left">Left</option>
                    <option value = "right">Right</option>
                    <option value = "mid">Mid</option>
                </select>
            </div>

            <div>
                Background Color:
                <ul>
                    <li><input name="backgroundColor" value="white" type="radio" checked />Default</li>
                    <li><input name="backgroundColor" value="#efefef" type="radio" />Gray</li>
                </ul>
            </div>

            <div>
                Pyramid Color:
                <ul>
                    <li><input name="seriesColor" value="green" type="radio" checked />Green</li>
                    <li><input name="seriesColor" value="blue" type="radio" />Blue</li>
                </ul>
            </div>

            <div>
                Grids:
                <ul>
                    <li><input name="gridsVertical" value="vertical" type="checkbox" checked />Vertical</li>
                    <li><input name="gridsHorizontal" value="horizontal" type="checkbox" checked />Horizontal</li>
                    <li><input name="showMinorTicks" value="true" type="checkbox" />Only major</li>
                    <li><input name="plotBands" value="true" type="checkbox" />Plot Bands</li>
                </ul>
            </div>

            <div>
                <ul>
                    <li><input name="barPadding" value="4" type="checkbox" checked />Gap between bars</li>
                    <!-- value for showContour is speed at which to fade lines in/out -->
                    <li><input name="showContour" value="500" type="checkbox" />Comparison Line</li>
                </ul>
            </div>

            <div class="tooltip">
                <table>
                    <tr>
                        <td>Age: </td><td><div class="tooltip-item" id="tooltipAge">&nbsp;</div></td>
                    </tr>
                    <tr>
                        <td>Male: </td><td><div class="tooltip-item"  id="tooltipMale">&nbsp;</div></td>
                    </tr>
                    <tr>
                        <td>Female: </td><td><div class="tooltip-item"  id="tooltipFemale">&nbsp;</div></td>
                    </tr>
                    <tr>
                        <td>Ratio: </td><td><div class="tooltip-item"  id="tooltipRatio">&nbsp;</div></td>
                    </tr>
                </table>
            </div>
        </td>

        <td class="chart">
            <div class="chart-container"> 
                <div id="chart1"></div>
                <div class="jqplot-datestamp"></div>
            </div>
        </td>

    </table>

    <pre class="code brush:js"></pre>
  


    <script class="code" type="text/javascript" language="javascript">
    $(document).ready(function(){

        // the "x" values from the data will go into the ticks array.  
        // ticks should be strings for this case where we have values like "75+"
        var ticks = ["0-4", "5-9", "10-14", "15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49", "50-54", "55-59", "60-64", "65-69", "70-74", "75+"];

        // The "y" values of the data are put into seperate series arrays.
        var male = [4.425251, 5.064975, 4.401382, 3.787731, 2.306403, 3.110203, 2.824716, 3.846422, 3.067799, 2.936013, 2.505067, 2.018346, 1.90446, 1.357237, 0.909704, 0.988836];
        var female = [4.28698, 4.343237, 4.710053, 3.99281, 2.811107, 3.191518, 4.855351, 4.62347, 4.032976, 4.414623, 3.210845, 2.426347, 2.635736, 1.811459, 1.515899, 1.683044];
        var male2 = [1.445677, 2.088224, 2.159879, 2.401152, 3.701622, 3.897444, 5.048783, 4.367545, 3.304588, 3.784367, 3.059088, 2.052513, 1.412907, 0.934326, 0.541234, 0.784258];
        var female2 =[2.238284, 2.974165, 2.360351, 3.03517, 4.80941, 6.229139, 7.257596, 5.847782, 5.226342, 6.201237, 4.474141, 2.769444, 2.048169, 1.47749, 0.87372, 1.193951];

        // Custom color arrays are set up for each series to get the look that is desired.
        // Two color arrays are created for the default and optional color which the user can pick.
        var greenColors = ["#526D2C", "#77933C", "#C57225", "#C57225"];
        var blueColors = ["#3F7492", "#4F9AB8", "#C57225", "#C57225"];

        // To accomodate changing y axis, need to keep track of plot options.
        // changing axes will require recreating the plot, so need to keep 
        // track of state changes.
        var plotOptions = {
            // We set up a customized title which acts as labels for the left and right sides of the pyramid.
            title: '<div style="float:left;width:50%;text-align:center">Male</div><div style="float:right;width:50%;text-align:center">Female</div>',

            // by default, the series will use the green color scheme.
            seriesColors: greenColors,

            grid: {
                drawBorder: false,
                shadow: false,
                background: "white",
                rendererOptions: {
                    // plotBands is an option of the pyramidGridRenderer.
                    // it will put banding at starting at a specified value
                    // along the y axis with an adjustable interval.
                    plotBands: {
                        show: false,
                        interval: 2
                    }
                },
            },

            // This makes the effective starting value of the axes 0 instead of 1.
            // For display, the y axis will use the ticks we supplied.
            defaultAxisStart: 0,
            seriesDefaults: {
                renderer: $.jqplot.PyramidRenderer,
                rendererOptions: {
                    barPadding: 4
                },
                yaxis: "yaxis",
                shadow: false
            },

            // We have 4 series, the left and right pyramid bars and
            // the left and rigt overlay lines.
            series: [
                // For pyramid plots, the default side is right.
                // We want to override here to put first set of bars
                // on left.
                {
                    rendererOptions:{
                        side: 'left',
                        synchronizeHighlight: 1
                    }
                },
                {
                    yaxis: "y2axis",
                    rendererOptions:{
                        synchronizeHighlight: 0
                    }
                },
                // Pyramid series are filled bars by default.
                // The overlay series will be unfilled lines.
                {
                    rendererOptions: {
                        fill: false,
                        side: "left"
                    }
                },
                {
                    yaxis: "y2axis",
                    rendererOptions: {
                        fill: false
                    }
                }
            ],

            // Set up all the y axes, since users are allowed to switch between them.
            // The only axis that will show is the one that the series are "attached" to.
            // We need the appropriate options for the others for when the user switches.
            axes: {
                xaxis: {
                    tickOptions: {},
                    rendererOptions: {
                        baselineWidth: 2
                    }
                },
                yaxis: {
                    label: "Age",
                    // Use canvas label renderer to get rotated labels.
                    labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
                    // include empty tick options, they will be used
                    // as users set options with plot controls.
                    tickOptions: {},
                    showMinorTicks: true,
                    ticks: ticks,
                    rendererOptions: {
                        category: true,
                        baselineWidth: 2
                    }
                },
                yMidAxis: {
                    label: "Age",
                    // include empty tick options, they will be used
                    // as users set options with plot controls.
                    tickOptions: {},
                    showMinorTicks: true,
                    ticks: ticks,
                    rendererOptions: {
                        category: true,
                        baselineWidth: 2
                    }
                },
                y2axis: {
                    label: "Age",
                    // Use canvas label renderer to get rotated labels.
                    labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
                    // include empty tick options, they will be used
                    // as users set options with plot controls.
                    tickOptions: {},
                    showMinorTicks: true,
                    ticks: ticks,
                    rendererOptions: {
                        category: true,
                        baselineWidth: 2
                    }
                }
            }
        };

        // initialize form elements
        // set these before attaching event handlers.

        $("input[type=checkbox][name=gridsVertical]").attr("checked", true);
        $("input[type=checkbox][name=gridsHorizontal]").attr("checked", true);
        $("input[type=checkbox][name=showMinorTicks]").attr("checked", false);
        $("input[type=checkbox][name=plotBands]").attr("checked", false);
        $("input[type=checkbox][name=showContour]").attr("checked", true);
        $("input[type=checkbox][name=barPadding]").attr("checked", true);
        $("select[name=axisPosition]").val("both");
        $("input[type=radio][name=backgroundColor]").attr("checked", false);
        $("input[type=radio][name=backgroundColor][value=white]").attr("checked", true);
        $("input[type=radio][name=backgroundColor]").attr("checked", false);
        $("input[type=radio][name=backgroundColor][value=white]").attr("checked", true);
        $("input[type=radio][name=seriesColor]").attr("checked", false);
        $("input[type=radio][name=seriesColor][value=green]").attr("checked", true);

        plot1 = $.jqplot("chart1", [male, female, male2, female2], plotOptions);

        // After plot creation, check to see if contours should be displayed
        checkContour();

        //////
        // The followng functions use verbose css selectors to make
        // it clear exactly which elements they are binging to/operating on
        //////
        
        //////
        // Function which checkes if the countour lines checkbox is checked.
        // If not, hide the contour lines.
        //////
        function checkContour() {
            if (!$("input[type=checkbox][name=showContour]").get(0).checked) {
                plot1.series[2].canvas._elem.addClass("jqplot-series-hidden");
                plot1.series[2].canvas._elem.hide();
                plot1.series[3].canvas._elem.addClass("jqplot-series-hidden");
                plot1.series[3].canvas._elem.hide();
            }
        }    

        $("select[name=axisPosition]").change(function(){ 
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.

            switch ($(this).val()) {
                case "both":
                    plotOptions.series[0].yaxis = "yaxis";
                    plotOptions.series[1].yaxis = "y2axis";
                    plotOptions.series[2].yaxis = "yaxis";
                    plotOptions.series[3].yaxis = "y2axis";
                    break;
                case "left":
                    plotOptions.series[0].yaxis = "yaxis";
                    plotOptions.series[1].yaxis = "yaxis";
                    plotOptions.series[2].yaxis = "yaxis";
                    plotOptions.series[3].yaxis = "yaxis";
                    break;
                case "right":
                    plotOptions.series[0].yaxis = "y2axis";
                    plotOptions.series[1].yaxis = "y2axis";
                    plotOptions.series[2].yaxis = "y2axis";
                    plotOptions.series[3].yaxis = "y2axis";
                    break;
                case "mid":
                    plotOptions.series[0].yaxis = "yMidAxis";
                    plotOptions.series[1].yaxis = "yMidAxis";
                    plotOptions.series[2].yaxis = "yMidAxis";
                    plotOptions.series[3].yaxis = "yMidAxis";
                    break;
                default:
                    break;
                    
            }

            plot1.destroy();
            plot1 = $.jqplot("chart1", [male, female, male2, female2], plotOptions);
            // Finally, check to see if we need to hide contour lines.
            checkContour();
        });

        $("input[type=radio][name=backgroundColor]").change(function(){ 
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.
            plot1.grid.background = $(this).val();
            plotOptions.grid.background = $(this).val();
            plot1.replot();
            // Finally, check to see if we need to hide contour lines.
            checkContour();
        });

        $("input[type=radio][name=seriesColor]").change(function(){ 
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.
            if ($(this).val() === "blue") {
                // reset highlight colors so they will be recalculated.
                plot1.series[0].highlightColors = [];
                plot1.series[1].highlightColors = [];
                // reset series color to properly calculate highlight color.
                plot1.series[0].color = blueColors[0];
                plot1.series[1].color = blueColors[1];
                // to actually draw a new color, have to set the color on the shaperenderer.
                plot1.series[0].renderer.shapeRenderer.fillStyle = blueColors[0];
                plot1.series[1].renderer.shapeRenderer.fillStyle = blueColors[1];
                // update plot options state.
                plotOptions.seriesColors = blueColors;
            }
            else if ($(this).val() === "green") {
                // reset highlight colors so they will be recalculated.
                plot1.series[0].highlightColors = [];
                plot1.series[1].highlightColors = [];
                // reset series color to properly calculate highlight color.
                plot1.series[0].color = greenColors[0];
                plot1.series[1].color = greenColors[1];
                // to actually draw a new color, have to set the color on the shaperenderer.
                plot1.series[0].renderer.shapeRenderer.fillStyle = greenColors[0];
                plot1.series[1].renderer.shapeRenderer.fillStyle = greenColors[1];
                // update plot options state.
                plotOptions.seriesColors = blueColors;
            }
            plot1.replot();
            // Finally, check to see if we need to hide contour lines.
            checkContour();
        });


        $("input[type=checkbox][name=gridsVertical]").change(function(){
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.
            plot1.axes.xaxis.tickOptions.showGridline = this.checked;
            plotOptions.axes.xaxis.tickOptions.showGridline = this.checked;
            plot1.replot();
            // Finally, check to see if we need to hide contour lines.
            checkContour();
        });

        $("input[type=checkbox][name=gridsHorizontal]").change(function(){
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.
            plot1.axes.yaxis.tickOptions.showGridline = this.checked;
            plot1.axes.y2axis.tickOptions.showGridline = this.checked;
            plot1.axes.yMidAxis.tickOptions.showGridline = this.checked;
            plotOptions.axes.yaxis.tickOptions.showGridline = this.checked;
            plotOptions.axes.y2axis.tickOptions.showGridline = this.checked;
            plotOptions.axes.yMidAxis.tickOptions.showGridline = this.checked;
            plot1.replot();
            // Finally, check to see if we need to hide contour lines.
            checkContour();
        });

        $("input[type=checkbox][name=showMinorTicks]").change(function(){
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.
            plot1.axes.yaxis.showMinorTicks = !this.checked;
            plot1.axes.y2axis.showMinorTicks = !this.checked;
            plot1.axes.yMidAxis.showMinorTicks = !this.checked;
            plotOptions.axes.yaxis.showMinorTicks = !this.checked;
            plotOptions.axes.y2axis.showMinorTicks = !this.checked;
            plotOptions.axes.yMidAxis.showMinorTicks = !this.checked;
            plot1.replot();
            // Finally, check to see if we need to hide contour lines.
            checkContour();
        });

        $("input[type=checkbox][name=plotBands]").change(function(){
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.
            plot1.grid.plotBands.show = this.checked;
            plotOptions.grid.rendererOptions.plotBands.show = this.checked;
            plot1.replot();
            // Finally, check to see if we need to hide contour lines.
            checkContour();
        });

        $("input[type=checkbox][name=showContour]").change(function(){
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.
            var speed = $(this).val();
            if (this.checked) {
                plot1.series[2].canvas._elem.removeClass("jqplot-series-hidden");
                plot1.series[2].canvas._elem.fadeIn(speed);
                plot1.series[3].canvas._elem.removeClass("jqplot-series-hidden");
                plot1.series[3].canvas._elem.fadeIn(speed);
            }
            else {
                plot1.series[2].canvas._elem.addClass("jqplot-series-hidden");
                plot1.series[2].canvas._elem.fadeOut(speed);
                plot1.series[3].canvas._elem.addClass("jqplot-series-hidden");
                plot1.series[3].canvas._elem.fadeOut(speed);
            }
        });

        $("input[type=checkbox][name=barPadding]").change(function(){
            // this refers to the html element we are binding to.
            // $(this) is jQuery object on that element.
            if (this.checked) {
                var val = parseFloat($(this).val());
                plot1.series[0].barPadding = val;
                plot1.series[1].barPadding = val;
                plotOptions.seriesDefaults.rendererOptions.barPadding = val;
            }
            else {
                plot1.series[0].barPadding = 0;
                plot1.series[1].barPadding = 0;
                plotOptions.seriesDefaults.rendererOptions.barPadding = 0;
            }
            plot1.replot();
            // Finally, check to see if we need to hide contour lines.
            checkContour();
        });

        // bind to the data highlighting event to make custom tooltip:
        $(".jqplot-target").bind("jqplotDataHighlight", function(evt, seriesIndex, pointIndex, data) {
            // Here, assume first series is male poulation and second series is female population.
            // Adjust series indices as appropriate.
            var malePopulation = Math.abs(plot1.series[0].data[pointIndex][1]);
            var femalePopulation = Math.abs(plot1.series[1].data[pointIndex][1]);
            var ratio = femalePopulation / malePopulation * 100;

            $("#tooltipMale").stop(true, true).fadeIn(250).html(malePopulation.toPrecision(4));
            $("#tooltipFemale").stop(true, true).fadeIn(250).html(femalePopulation.toPrecision(4));
            $("#tooltipRatio").stop(true, true).fadeIn(250).html(ratio.toPrecision(4));

            // Since we don't know which axis is rendererd and acive with out a little extra work,
            // just use the supplied ticks array to get the age label.
            $("#tooltipAge").stop(true, true).fadeIn(250).html(ticks[pointIndex]);
        });

        // bind to the data highlighting event to make custom tooltip:
        $(".jqplot-target").bind("jqplotDataUnhighlight", function(evt, seriesIndex, pointIndex, data) {
            // clear out all the tooltips.
            $(".tooltip-item").stop(true, true).fadeOut(200).html('');
        });

        // add a date at the bottom.

        var d = new $.jsDate();
        $("div.jqplot-datestamp").html("Generated on "+d.strftime("%v"));
    
        $("div.chart-container").resizable({delay:20});    

        $("div.chart-container").bind("resize", function(event, ui) {
            plot1.replot();
        });

    });
    </script>

<!-- End example scripts -->

<!-- Don't touch this! -->


    <script class="include" type="text/javascript" src="../jquery.jqplot.min.js"></script>
    <script type="text/javascript" src="syntaxhighlighter/scripts/shCore.min.js"></script>
    <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
    <script type="text/javascript" src="syntaxhighlighter/scripts/shBrushXml.min.js"></script>
<!-- End Don't touch this! -->

<!-- Additional plugins go here -->

    <script class="include" type="text/javascript" src="../plugins/jqplot.categoryAxisRenderer.min.js"></script>

    <!-- load the pyramidAxis and Grid renderers in production.  pyramidRenderer will try to load via ajax if not present, but that is not optimal and depends on paths being set. -->
    <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidAxisRenderer.min.js"></script>
    <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidGridRenderer.min.js"></script> 

    <script class="include" type="text/javascript" src="../plugins/jqplot.pyramidRenderer.min.js"></script>
    <script class="include" type="text/javascript" src="../plugins/jqplot.canvasTextRenderer.min.js"></script>
    <script class="include" type="text/javascript" src="../plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
    <script class="include" type="text/javascript" src="jquery-ui/js/jquery-ui.min.js"></script>

<!-- End additional plugins -->


	</div>	
	<script type="text/javascript" src="example.min.js"></script>

</body>


</html>
